const { AIModel } = require('../models');

/**
 * AI 模型配置控制器
 */
class AIModelController {
  /**
   * 获取所有模型配置
   */
  async getAllModels(req, res) {
    try {
      const models = await AIModel.findAll({
        order: [['is_active', 'DESC'], ['created_at', 'DESC']]
      });

      res.json({
        success: true,
        data: models
      });
    } catch (error) {
      console.error('获取模型列表失败:', error);
      res.status(500).json({
        success: false,
        message: '获取模型列表失败'
      });
    }
  }

  /**
   * 获取激活的模型
   */
  async getActiveModel(req, res) {
    try {
      const activeModel = await AIModel.findOne({
        where: { is_active: true }
      });

      if (!activeModel) {
        return res.status(404).json({
          success: false,
          message: '未找到激活的模型，请先配置'
        });
      }

      res.json({
        success: true,
        data: activeModel
      });
    } catch (error) {
      console.error('获取激活模型失败:', error);
      res.status(500).json({
        success: false,
        message: '获取激活模型失败'
      });
    }
  }

  /**
   * 创建模型配置
   */
  async createModel(req, res) {
    try {
      const {
        name,
        display_name,
        base_url,
        api_key,
        model_name,
        max_tokens,
        temperature,
        timeout,
        description
      } = req.body;

      // 验证必填字段
      if (!name || !display_name || !base_url || !api_key || !model_name) {
        return res.status(400).json({
          success: false,
          message: '请填写所有必填字段'
        });
      }

      // 检查名称是否已存在
      const existing = await AIModel.findOne({ where: { name } });
      if (existing) {
        return res.status(400).json({
          success: false,
          message: '该模型名称已存在'
        });
      }

      const model = await AIModel.create({
        name,
        display_name,
        base_url,
        api_key,
        model_name,
        max_tokens: max_tokens || 2000,
        temperature: temperature || 0.7,
        timeout: timeout || 60000,
        description,
        is_active: false
      });

      res.json({
        success: true,
        data: model,
        message: '模型配置创建成功'
      });
    } catch (error) {
      console.error('创建模型配置失败:', error);
      res.status(500).json({
        success: false,
        message: '创建模型配置失败'
      });
    }
  }

  /**
   * 更新模型配置
   */
  async updateModel(req, res) {
    try {
      const { id } = req.params;
      const {
        display_name,
        base_url,
        api_key,
        model_name,
        max_tokens,
        temperature,
        timeout,
        description
      } = req.body;

      const model = await AIModel.findByPk(id);
      if (!model) {
        return res.status(404).json({
          success: false,
          message: '模型配置不存在'
        });
      }

      await model.update({
        display_name,
        base_url,
        api_key,
        model_name,
        max_tokens,
        temperature,
        timeout,
        description
      });

      res.json({
        success: true,
        data: model,
        message: '模型配置更新成功'
      });
    } catch (error) {
      console.error('更新模型配置失败:', error);
      res.status(500).json({
        success: false,
        message: '更新模型配置失败'
      });
    }
  }

  /**
   * 激活模型
   */
  async activateModel(req, res) {
    try {
      const { id } = req.params;

      const model = await AIModel.findByPk(id);
      if (!model) {
        return res.status(404).json({
          success: false,
          message: '模型配置不存在'
        });
      }

      // 先将所有模型设为非激活
      await AIModel.update(
        { is_active: false },
        { where: {} }
      );

      // 激活当前模型
      await model.update({ is_active: true });

      res.json({
        success: true,
        data: model,
        message: '模型已激活'
      });
    } catch (error) {
      console.error('激活模型失败:', error);
      res.status(500).json({
        success: false,
        message: '激活模型失败'
      });
    }
  }

  /**
   * 删除模型配置
   */
  async deleteModel(req, res) {
    try {
      const { id } = req.params;

      const model = await AIModel.findByPk(id);
      if (!model) {
        return res.status(404).json({
          success: false,
          message: '模型配置不存在'
        });
      }

      if (model.is_active) {
        return res.status(400).json({
          success: false,
          message: '无法删除激活的模型，请先激活其他模型'
        });
      }

      await model.destroy();

      res.json({
        success: true,
        message: '模型配置已删除'
      });
    } catch (error) {
      console.error('删除模型配置失败:', error);
      res.status(500).json({
        success: false,
        message: '删除模型配置失败'
      });
    }
  }
}

module.exports = new AIModelController();
